package com.jprocms.module.cms.service.investigate;

import com.jpro.framework.common.pojo.PageResult;
import com.jprocms.module.cms.controller.admin.investigate.vo.InvestigateCreateReqVO;
import com.jprocms.module.cms.controller.admin.investigate.vo.InvestigateListReqVO;
import com.jprocms.module.cms.controller.admin.investigate.vo.InvestigatePageReqVO;
import com.jprocms.module.cms.controller.admin.investigate.vo.InvestigateUpdateReqVO;
import com.jprocms.module.cms.dal.dataobject.investigate.InvestigateDO;
import org.springframework.lang.Nullable;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 问卷调查 Service 接口
 *
 * @author jprocms
 */
public interface InvestigateService {

    void vote(Long id, Map<Long, List<Long>> optionMap, Map<Long, String> itemAnsMap,
              Long siteId, @Nullable Long userId, String ip, Long cookie);

    /**
     * 创建问卷调查
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createInvestigate(@Valid InvestigateCreateReqVO createReqVO);

    /**
     * 更新问卷调查
     *
     * @param updateReqVO 更新信息
     */
    void updateInvestigate(@Valid InvestigateUpdateReqVO updateReqVO);

    /**
     * 删除问卷调查
     *
     * @param id 编号
     */
    void deleteInvestigate(Long id);

    /**
     * 批量删除问卷调查
     *
     * @param ids
     */
    void deleteByIds(List<Long> ids);

    /**
     * 获得问卷调查
     *
     * @param id 编号
     * @return 问卷调查
     */
    InvestigateDO getInvestigate(Long id);

    /**
     * 获得问卷调查列表
     *
     * @param ids 编号
     * @return 问卷调查列表
     */
    List<InvestigateDO> getInvestigateList(Collection<Long> ids);

    /**
     * 获得问卷调查分页
     *
     * @param pageReqVO 分页查询
     * @return 问卷调查分页
     */
    PageResult<InvestigateDO> getInvestigatePage(InvestigatePageReqVO pageReqVO);

    /**
     * 获得问卷调查列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 问卷调查列表
     */
    List<InvestigateDO> getInvestigateList(InvestigateListReqVO exportReqVO);

}
